﻿using MapMaker.Engine.CoreCommon;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MapMaker.Engine.Model.VXAce
{
    public class RPG_System
    {
        [RubyProperty("game_title")]
        public string GameTitle { get; set; }

        [RubyProperty("version_id")]
        public int VersionID { get; set; }

        [RubyProperty("japanese")]
        public bool Japanese { get; set; }

        [RubyProperty("party_members")]
        public int?[] PartyMembers { get; set; }

        [RubyProperty("currency_unit")]
        public object CurrencyUnit { get; set; }

        [RubyProperty("skill_types")]
        public string[] SkillTypes { get; set; }

        [RubyProperty("weapon_types")]
        public string[] WeaponTypes { get; set; }

        [RubyProperty("armor_types")]
        public string[] ArmorTypes { get; set; }

        [RubyProperty("elements")]
        public string[] Elements { get; set; }

        [RubyProperty("switches")]
        public string[] Switches { get; set; }

        [RubyProperty("variables")]
        public string[] Variables { get; set; }

        [RubyProperty("boat")]
        public RPG_Vehicle Boat { get; set; }

        [RubyProperty("ship")]
        public RPG_Vehicle Ship { get; set; }

        [RubyProperty("airship")]
        public RPG_Vehicle Airship { get; set; }

        [RubyProperty("title1_name")]
        public string Title1Name { get; set; }

        [RubyProperty("title2_name")]
        public string Title2Name { get; set; }

        [RubyProperty("opt_draw_title")]
        public bool EnableDrawTitle { get; set; }

        [RubyProperty("opt_use_midi")]
        public bool EnableMidi { get; set; }

        [RubyProperty("opt_transparent")]
        public bool EnableTransparent { get; set; }

        [RubyProperty("opt_followers")]
        public bool EnableFollowers { get; set; }

        [RubyProperty("opt_slip_death")]
        public bool EnableSlipDeath { get; set; }

        [RubyProperty("opt_floor_death")]
        public bool EnableFloorDeath { get; set; }

        [RubyProperty("opt_display_tp")]
        public bool EnableDisplayTP { get; set; }

        [RubyProperty("opt_extra_exp")]
        public bool EnableExtraExperience { get; set; }

        [RubyProperty("window_tone")]
        public object WindowTone { get; set; }

        [RubyProperty("title_bgm")]
        public RPG_BGM TitleBackgroundMusic { get; set; }

        [RubyProperty("battle_bgm")]
        public RPG_BGM BattleBackgroundMusic { get; set; }

        [RubyProperty("battle_end_me")]
        public RPG_ME BattleEnd_me { get; set; }

        [RubyProperty("gameover_me")]
        public RPG_ME gameover_me { get; set; }

        [RubyProperty("sounds")]
        public List<RPG_SE> Sounds { get; set; }

        [RubyProperty("test_battlers")]
        public List<RPG_TestBattler> TestBattlers { get; set; }

        [RubyProperty("test_troop_id")]
        public int TestTroopID { get; set; }

        [RubyProperty("start_map_id")]
        public int StartMapID { get; set; }

        [RubyProperty("start_x")]
        public int StartX { get; set; }

        [RubyProperty("start_y")]
        public int StartY { get; set; }

        [RubyProperty("terms")]
        public RPG_Terms Terms { get; set; }

        [RubyProperty("battleback1_name")]
        public string Battleback1Name { get; set; }

        [RubyProperty("battleback2_name")]
        public string Battleback2Name { get; set; }

        [RubyProperty("battler_name")]
        public string BattlerName { get; set; }

        [RubyProperty("battler_hue")]
        public int BattlerHue { get; set; }

        [RubyProperty("edit_map_id")]
        public int EditMapID { get; set; }

        public class RPG_Terms
        {
            [RubyProperty("basic")]
            public string[] Basic { get; set; }

            [RubyProperty("params")]
            public string[] Params { get; set; }

            [RubyProperty("etypes")]
            public string[] ETypes { get; set; }

            [RubyProperty("commands")]
            public string[] Commands { get; set; }
        }
        public class RPG_TestBattler
        {
            [RubyProperty("actor_id")]
            public int ActorID { get; set; }

            [RubyProperty("level")]
            public int Level { get; set; }

            [RubyProperty("equips")]
            public int[] Equipment { get; set; }
        }

        public class RPG_Vehicle
        {
            [RubyProperty("character_name")]
            public string CharacterName { get; set; }

            [RubyProperty("character_index")]
            public int CharacterIndex { get; set; }

            [RubyProperty("bgm")]
            public RPG_BGM BackgroundMusic { get; set; }

            [RubyProperty("start_map_id")]
            public int StartMapID { get; set; }

            [RubyProperty("start_x")]
            public int StartX { get; set; }

            [RubyProperty("start_y")]
            public int StartY { get; set; }
        }

        internal static IEnumerable<dynamic> Export(IObjectManager factory, IEnumerable list)
        {
            throw new NotImplementedException();
        }

    }
}
